package BeheerFysiotherapeuten.Model;

import java.io.Serializable;

import java.util.ArrayList;
import java.util.Observable;

public class PraktijkLijst extends Observable implements Serializable {
	private Praktijk praktijk;
	private ArrayList<Praktijk> praktijken;

	public PraktijkLijst() {
		praktijken = new ArrayList<Praktijk>();
	}

	public void newPraktijk(String naam, String adres, String postcode,
			String telNr, int Kamers) {
		praktijk = new Praktijk(naam, adres, postcode, telNr, Kamers);

		praktijken.add(praktijk);

		setChanged();
		notifyObservers();

	}

	public ArrayList<Praktijk> stuurLijst() {

		return praktijken;
	}

	public int lengtePraktijken() {
		return praktijken.size();
	}

	public void wijzigPraktijk(String naam, String adres, String postcode,
			String telNr, int Kamers, int selectedPraktijk) {
		Praktijk wijzig = praktijken.get(selectedPraktijk);
		wijzig.setNaam(naam);
		wijzig.setAdres(adres);
		wijzig.setPostcode(postcode);
		wijzig.setTelNr(telNr);
		wijzig.setkamers(Kamers);
		setChanged();
		notifyObservers();

	}

	public void verwijderPraktijk(int praktijk) {
		praktijken.remove(praktijk);

		setChanged();
		notifyObservers();

	}

	public void verwijderTherapeut(String praktijknaam, String bsn) {
		
		for (int i = 0; i < praktijken.size(); i++) {
			if (praktijken.get(i).getNaam().equals(praktijknaam)) {
				
				praktijken.get(i).verwijderTherapeut(bsn);
				

			}

		}
		setChanged();
		notifyObservers();
	}

	public void maakTherapeut(String voornaamField, String tussenvoegselField,
			String achternaamField, int bsn, String woonplaatsField,
			String geslachtField, String geb, String adresField,
			String postcodeField, String tel, String start, int uren, int praktijk) {

		praktijken.get(praktijk)
				.newTherapeut(voornaamField, tussenvoegselField,
						achternaamField, bsn, woonplaatsField, geslachtField,
						geb, adresField, postcodeField, tel, start, uren);

		setChanged();
		notifyObservers();
	}

	public void wijzigTherapeut(String voorNaam, String tussenVoegsel,
			String achterNaam, int bsn, String woonplaats, String geslacht,
			String gebDatum, String adres, String postcode, String telNr,
			String startDatum, String bsnoud, String praktijkoud,
			String praktijk) {

		for (int i = 0; i < praktijken.size(); i++) {
			if (praktijken.get(i).getNaam().equals(praktijkoud)) {
				praktijken.get(i).wijzigTherapeut(voorNaam, tussenVoegsel,
						achterNaam, bsn, woonplaats, geslacht, gebDatum, adres,
						postcode, telNr, startDatum, bsnoud);
				String [] nieuw = praktijk.split("-");
				if (praktijkoud != praktijk) {
					
					for (int y = 0; y < praktijken.size(); y++) {
						if (praktijken.get(y).getNaam().equals(praktijkoud)) {
					
							for (int x = 0; x < praktijken.get(y).getTherapeuten().size(); x++) {
								if (praktijken.get(y).getTherapeuten().get(x).getBsnint() == bsn) {
								
									for (int z = 0; z < praktijken.size(); z++) {
										if (praktijken.get(z).getNaam().equals(nieuw[0])) {
											
											praktijken.get(z).getTherapeuten().add(praktijken.get(y).getTherapeuten().get(x));
										}
									}
									praktijken.get(y).getTherapeuten()
											.remove(x);
								}
							}
						}
					}
				}

			}
		}
		setChanged();
		notifyObservers();
	}
	
	public void nieuwTherapie(String naam,String soort,int duur,String doelgroep,double prijs,String omschijving,String behandelcode,String therapeutnaam, String bsn){
		
		
		for(int x=0; x < praktijken.size(); x++ )
			for(int y=0; y< praktijken.get(x).getTherapeuten().size(); y++){
				if (praktijken.get(x).getTherapeuten().get(y).getVoorNaam().equals(therapeutnaam) && praktijken.get(x).getTherapeuten().get(y).getBsn().equals(bsn) ){
					praktijken.get(x).getTherapeuten().get(y).nieuwTherapie(naam, soort, duur, doelgroep, prijs, omschijving, behandelcode);
					
				}
			}
		setChanged();
		notifyObservers();
		
	}
	
	public void wijzigTherapie(String naamfield, String soortfield, int duur,
			String doelgroepfield, double prijs, String omschrijvingfield,
			String behandelcode, String behandelcodeoud , String therapeutbsn, String therapeutbsnoud) {
		boolean stop =true;

		for (int x = 0; x < praktijken.size(); x++) {
			for(int y=0; y< praktijken.get(x).getTherapeuten().size(); y++){
				if( praktijken.get(x).getTherapeuten().get(y).getBsn().equals(therapeutbsnoud)){
					for (int z=0; z< praktijken.get(x).getTherapeuten().get(y).getTherapieen().size(); z++){
						if(praktijken.get(x).getTherapeuten().get(y).getTherapieen().get(z).getBehandelcode().equals(behandelcodeoud)){
							praktijken.get(x).getTherapeuten().get(y).wijzigTherapie(naamfield,soortfield,duur,doelgroepfield,prijs,omschrijvingfield,behandelcode,behandelcodeoud);
							
							if (therapeutbsn.equals(therapeutbsnoud) == false) {
								if(stop){
								for (int a = 0; a < praktijken.size(); a++) {
									for(int b=0; b< praktijken.get(a).getTherapeuten().size(); b++){
										
											if( praktijken.get(a).getTherapeuten().get(b).getBsn().equals(therapeutbsn)){
												praktijken.get(a).getTherapeuten().get(b).getTherapieen().add(praktijken.get(x).getTherapeuten().get(y).getTherapieen().get(z));
												stop = false;
											}
										
										
										}
									}
									praktijken.get(x).getTherapeuten().get(y).getTherapieen().remove(z);
								}
							}
						}
					}
				}		
			}
		}
		setChanged();
		notifyObservers();
		
	}
	
 	public void verwijderTherapie(String therapeutbsn, String behandelcode) {
		
		for (int x = 0; x < praktijken.size(); x++) {
			for(int y=0; y< praktijken.get(x).getTherapeuten().size(); y++){
				if( praktijken.get(x).getTherapeuten().get(y).getBsn().equals(therapeutbsn)){
					for (int z=0; z< praktijken.get(x).getTherapeuten().get(y).getTherapieen().size(); z++){
						if(praktijken.get(x).getTherapeuten().get(y).getTherapieen().get(z).getBehandelcode().equals(behandelcode)){
							praktijken.get(x).getTherapeuten().get(y).getTherapieen().remove(z);
						}
					}
				}
			

			}

		setChanged();
		notifyObservers();
	}
	}
	
	}
	
	

